/****************************************************************************
**
** WX公众号:Qt历险记
** CSDN:Qt魔术师
**
****************************************************************************/

#include <QApplication>
#include <QCommandLineParser>
#include <QDebug>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    /* `Q_INIT_RESOURCE(sdi)` 是一个宏，在Qt框架中用于将资源文件初始化到应用程序中的功能。
     * 资源文件通常包括图像、文本、样式表等非代码形式的资源。在运行时，这个宏可以确保应用程序能够正确加载和访问这些资源文件。
     * "sdi"是资源文件的前缀，指明了资源文件的标识符。通过调用这个宏，可以将资源文件中的资源初始化并与应用程序相关联，
     * 使得应用程序可以在运行时使用这些资源文件中的资源。
    */
    Q_INIT_RESOURCE(sdi);

    QApplication app(argc, argv);

    // 源文件注册表构造函数会用到：QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    QCoreApplication::setApplicationName("SDI Example");
    QCoreApplication::setOrganizationName("QtProject");
    QCoreApplication::setApplicationVersion(QT_VERSION_STR);

    /*
        14:19:26: Starting C:\Users\Desktop\QtPro\sdi\debug\sdi.exe -h...
        Usage: C:\Users\Desktop\QtPro\sdi\debug\sdi.exe [options] file
        SDI Example

        Options:
          -?, -h, --help  Displays help on commandline options.
          --help-all      Displays help including Qt specific options.
          -v, --version   Displays version information.

        Arguments:
          file            The file(s) to open.
        14:19:26: C:\Users\Desktop\QtPro\sdi\debug\sdi.exe exited with code 0
    */
    QCommandLineParser parser;
    // 设置应用程序的描述信息为当前应用程序的名称。
    parser.setApplicationDescription(QCoreApplication::applicationName());
    // 添加帮助选项，当用户传入-h或--help时，应用程序将显示帮助信息
    parser.addHelpOption();
    // 添加版本选项，当用户传入-v或--version时，应用程序将显示版本信息 [SDI Example 5.14.2]
    parser.addVersionOption();
    // 添加位置参数，指定其名称为"file"，并提供对应的说明文本"The file(s) to open."。这表示用户可以通过命令行输入文件名来调用应用程序。
    parser.addPositionalArgument("命令行文件名fileName", "要打开的文件fileName(s)。");
    // 将由用户传入的参数进行解析并处理
    parser.process(app);

    MainWindow *mainWin = nullptr;

    // 获取命令行参数值 一些文件名 然后根据不同的文件打开不同的窗口
    // posArgs =  ("C:\\Users\\Desktop\\QtPro\\sdi\\document1.txt", "C:\\Users\\Desktop\\QtPro\\sdi\\document2.txt")
    const QStringList posArgs = parser.positionalArguments();
    qDebug()<<"posArgs = "<<posArgs;
    for (const QString &file : posArgs) {
        // 创建一个MainWindow类的新对象newWin，使用传入的文件名file作为参数进行初始化。
        MainWindow *newWin = new MainWindow(file);
        newWin->tile(mainWin); // 新建偏移窗口
        newWin->show();
        mainWin = newWin;
    }

    // 没有命令行参数文件名
    if (!mainWin)
        mainWin = new MainWindow;
    mainWin->show();

    return app.exec();
}
